package SecondeStage.YiChang;

public class RuntimeException1 extends Throwable {
    public static void main(String[] args) {
        // 1、空指针异常
        String name = null;
        try {
            System.out.println(name.length());
        } catch (Exception e) {
//            throw new java.lang.RuntimeException(e);
            System.out.println("出现异常的原因是： " + e.getMessage());
        }

        // 2、数学运算异常
        int n1 =10;
        int n2 =0;
        try {
            int res = n1/n2;
        } catch (Exception e) {
//            throw new RuntimeException(e);
            System.out.println("出现异常的原因是： " + e.getMessage());
        }

        // 3、数组下标越界异常
        int[] arr ={1,2,3};
        for (int i = 0; i <= arr.length; i++) {
            try {
                System.out.println(arr[i]);
            } catch (Exception e) {
//                throw new java.lang.RuntimeException(e);
                System.out.println("出现异常的原因是： " + e.getMessage());
            }
        }

        // 4、类型转换异常:试图将对象强制转换为不是实例的子类时，抛出异常
        A b =new B(); // 向上转型
        B b2 =(B)b; // 向下转型，ok
        try {
            C c2 =(C)b; //不行,B和C都是A的子类，但B和C没有关系
        } catch (Exception e) {
//            throw new java.lang.RuntimeException(e);
            System.out.println("出现异常的原因是： " + e.getMessage());
        }

        // 5、数字格式不正确异常: 当应用程序试图将字符串转换成一种数值类型，但该字符串不能转换为适当格式时，抛出异常
        String name1 ="1234";
        // 将String转换成int
        int num = Integer.parseInt(name1);
        System.out.println(num); //1234
        String name2="你好";
        try {
            int num2 = Integer.parseInt(name2); //不行
        } catch (NumberFormatException e) {
//            throw new java.lang.RuntimeException(e);
            System.out.println("出现异常的原因是： " + e.getMessage());
        }
    }
}

class A{}

class B extends A{}
class C extends A{}